
#ifndef __CE_GFX_IEFFECT_H__
#define __CE_GFX_IEFFECT_H__

#include <asset/asset.h>
#include <iobject.h>
#include <gfx/enum.h>

struct iEffectTechnique;
struct iLevelOfDetailSolver;

/**
 * \addtogroup shading
 * @{
 */

/**
 * @brief Interface for the collection of several iEffectTechnique for differen level of detail stages.
 */
struct iEffect : public ceAsset
{
	CE_ASSET_ID2 ('f', 'x')

	iEffect () : CE_ASSET_SUPER () { }


  virtual void ClearEffectPrograms () = 0;
	virtual void AddEffectTechnique (iEffectTechnique* technique) = 0;
	virtual bool RemoveEffectTechnique (iEffectTechnique* technique) = 0;

  virtual void SetSolver (iLevelOfDetailSolver* solver) = 0;
	virtual iEffectTechnique* Eval(float distance, float size) = 0;


};

/**
 * @}
 */

#endif /* __CE_GFX_IEFFECT_H__ */

